package com.ruoyi.system.service;

import java.util.List;
import java.util.Map;
import com.ruoyi.system.domain.AiConversation;

/**
 * AI智能助手Service接口
 * 
 * @author ruoyi
 * @date 2025-01-21
 */
public interface IAiAssistantService 
{
    /**
     * 查询AI对话记录
     * 
     * @param conversationId AI对话记录主键
     * @return AI对话记录
     */
    public AiConversation selectAiConversationByConversationId(Long conversationId);

    /**
     * 查询AI对话记录列表
     * 
     * @param aiConversation AI对话记录
     * @return AI对话记录集合
     */
    public List<AiConversation> selectAiConversationList(AiConversation aiConversation);

    /**
     * 新增AI对话记录
     * 
     * @param aiConversation AI对话记录
     * @return 结果
     */
    public int insertAiConversation(AiConversation aiConversation);

    /**
     * 修改AI对话记录
     * 
     * @param aiConversation AI对话记录
     * @return 结果
     */
    public int updateAiConversation(AiConversation aiConversation);

    /**
     * 批量删除AI对话记录
     * 
     * @param conversationIds 需要删除的AI对话记录主键集合
     * @return 结果
     */
    public int deleteAiConversationByConversationIds(String conversationIds);

    /**
     * 删除AI对话记录信息
     * 
     * @param conversationId AI对话记录主键
     * @return 结果
     */
    public int deleteAiConversationByConversationId(Long conversationId);

    /**
     * 获取AI编程提示
     * 
     * @param problemId 题目ID
     * @param questionType 问题类型
     * @param userCode 用户代码
     * @param language 编程语言
     * @return 编程提示
     */
    public String getProgrammingHint(String problemId, String questionType, String userCode, String language);

    /**
     * 分析代码
     * 
     * @param problemId 题目ID
     * @param userCode 用户代码
     * @param language 编程语言
     * @return 代码分析结果
     */
    public Map<String, Object> analyzeCode(String problemId, String userCode, String language);

    /**
     * 获取代码优化建议
     * 
     * @param problemId 题目ID
     * @param userCode 用户代码
     * @param language 编程语言
     * @param optimizationType 优化类型
     * @return 优化建议
     */
    public Map<String, Object> getOptimizationSuggestions(String problemId, String userCode, String language, String optimizationType);

    /**
     * 获取调试帮助
     * 
     * @param problemId 题目ID
     * @param userCode 用户代码
     * @param language 编程语言
     * @param errorMessage 错误信息
     * @param testCase 测试用例
     * @return 调试帮助
     */
    public Map<String, Object> getDebugHelp(String problemId, String userCode, String language, String errorMessage, String testCase);

    /**
     * 获取算法解释
     * 
     * @param problemId 题目ID
     * @param algorithmType 算法类型
     * @return 算法解释
     */
    public Map<String, Object> getAlgorithmExplanation(String problemId, String algorithmType);

    /**
     * 获取学习建议
     * 
     * @param problemId 题目ID
     * @param userLevel 用户水平
     * @param learningGoal 学习目标
     * @return 学习建议
     */
    public Map<String, Object> getLearningAdvice(String problemId, String userLevel, String learningGoal);

    /**
     * 评估代码
     * 
     * @param problemId 题目ID
     * @param userCode 用户代码
     * @param language 编程语言
     * @return 代码评分
     */
    public Map<String, Object> evaluateCode(String problemId, String userCode, String language);

    /**
     * 获取相似题目推荐
     * 
     * @param problemId 题目ID
     * @param userLevel 用户水平
     * @param limit 推荐数量
     * @return 相似题目列表
     */
    public List<Map<String, Object>> getSimilarProblems(String problemId, String userLevel, Integer limit);

    /**
     * 获取知识图谱
     * 
     * @param topic 主题
     * @param depth 深度
     * @return 知识图谱
     */
    public Map<String, Object> getKnowledgeGraph(String topic, String depth);

    /**
     * 获取编程挑战
     * 
     * @param userLevel 用户水平
     * @param category 题目类别
     * @param count 挑战数量
     * @return 编程挑战列表
     */
    public List<Map<String, Object>> getProgrammingChallenges(String userLevel, String category, Integer count);

    /**
     * 获取助手配置
     * 
     * @param userId 用户ID
     * @return 配置信息
     */
    public Map<String, Object> getAssistantConfig(String userId);

    /**
     * 更新助手配置
     * 
     * @param userId 用户ID
     * @param config 配置信息
     * @return 结果
     */
    public int updateAssistantConfig(String userId, Map<String, Object> config);

    /**
     * 获取助手统计信息
     * 
     * @param userId 用户ID
     * @param timeRange 时间范围
     * @return 统计信息
     */
    public Map<String, Object> getAssistantStats(String userId, String timeRange);
} 